/*
 * Powered By [rapid-framework]
 * Web Site: http://www.rapid-framework.org.cn
 * Google Code: http://code.google.com/p/rapid-framework/
 * Since 2008 - 2018
 */

package com.mianle.userapi.mapper;

import com.github.pagehelper.Page;
import com.mianle.userapi.model.WalletAccountLog;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

@Mapper
public interface WalletAccountLogMapper extends BaseMapper<WalletAccountLog> {
    /**
     * 查询用户消费记录信息
     * @param walletAccountLog
     * @return
     */
    Page<Map<String,Object>> getMlcAccountLogByUserId(@Param("item") WalletAccountLog walletAccountLog);

    Page<Map<String,Object>> getAccountLogByUserId(@Param("item") WalletAccountLog walletAccountLog);

    /**
     * 查询用户转帐记录
     *
     * @return
     */
    Page<WalletAccountLog> getTransferRecord(@Param("ids") List<Integer> ids, @Param("userId") int userId);

    /**
     * 查询用户转账记录详情
     * @param id
     * @return
     */
    Map<String, Object> getTransferDetails(@Param("id") int id);

    /**
     * 查询用户转出记录
     * @param ids
     * @param userId
     * @return
     */
    Page<Map<String,Object>> getTransferOutRecord(@Param("ids") List<Integer> ids, @Param("userId") int userId);

    /**
     * 查询用户转入记录
     * @param ids
     * @param userId
     * @return
     */
    Page<Map<String,Object>> getTransferInRecord(@Param("ids") List<Integer> ids, @Param("userId") int userId);

    /**
     * 获取转账记录详情
     *
     * @param id 记录id
     * @return
     */
    Map<String, Object> getDetailedInformation(Integer id);

    /**
     * 查询各类资金详情
     * @param changeType 资金变动类型
     * @return
     */
    Page<Map<String,Object>> getCapitalDetails(@Param("id") Integer changeType);

    /**
     * 每种资金全部记录信息
     * @return
     */
    Map<String,Object> countCapitalAllNote(@Param("changeType") Integer changeType);

    /**
     * 每种资金转入记录信息
     * @return
     */
    Map<String,Object> countCapitalInNote(@Param("changeType") Integer changeType);


    //活动总资金
    Float getNumberCapitalTotal(@Param("id") int partyId, @Param("changeType") int type);
    //活动总积分
    Float getNumberPointTotal(@Param("id") int partyId, @Param("changeType") int type);
    //活动总奖励积分
    Float getNumberPrizePoint(@Param("id") int partyId, @Param("changeType") int type);



    int getCount(@Param("id") int partyId, @Param("changeType") int type);

    Page<Map<String,Object> > showUserPartyCapitalTotal(@Param("partyId") int partyId, @Param("changeType") int changeType);

    /**
     * 获取资金转入数
     * @param startTime
     * @param endTime
     * @param changeType
     * @return
     */
    BigDecimal getCapitalIntoNum(@Param("startTime") Long startTime, @Param("endTime") Long endTime,
                                 @Param("changeType") Integer changeType);

    /**
     * 获取资金转出数
     * @param startTime
     * @param endTime
     * @param changeType
     * @return
     */
    BigDecimal getCapitalOutNum(@Param("startTime") Long startTime, @Param("endTime") Long endTime,
                                @Param("changeType") Integer changeType);

    /**
     * 获取资金手续费
     * @param startTime
     * @param endTime
     * @param changeType
     * @return
     */
    BigDecimal getCapitalFees(@Param("startTime") Long startTime, @Param("endTime") Long endTime,
                              @Param("changeType") Integer changeType);

    /**
     * 获取剩余资产总量
     * @param changeType
     * @return
     */
    BigDecimal getRemainingCapital(Integer changeType);

    /**
     * 获取兑换积分数
     * @param startTime
     * @param endTime
     * @return
     */
    BigDecimal getBasePointNum(@Param("startTime") Long startTime, @Param("endTime") Long endTime);

    /**
     * 获得积分返回余额数
     * @param startTime
     * @param endTime
     * @return
     */
    BigDecimal getPointsRetuBalanceNum(@Param("startTime") Long startTime, @Param("endTime") Long endTime);

    /**
     * 获取积分转出数
     * @param startTime
     * @param endTime
     * @return
     */
    BigDecimal getPointsRolledOutNum(@Param("startTime") Long startTime, @Param("endTime") Long endTime);

    /**
     * 获得积分手续费
     * @param startTime
     * @param endTime
     * @return
     */
    BigDecimal getPointFee(@Param("startTime") Long startTime, @Param("endTime") Long endTime);

    /**
     * 获取积分剩余总量
     * @param startTime
     * @param endTime
     * @return
     */
    BigDecimal getRemainingPoints(@Param("startTime") Long startTime, @Param("endTime") Long endTime);

    /**
     * 获取返回余额
     * @param startTime
     * @param endTime
     * @return
     */
    BigDecimal getBalanceNum(@Param("startTime") Long startTime, @Param("endTime") Long endTime);

    /**
     * 获取转出余额
     * @param startTime
     * @param endTime
     * @return
     */
    BigDecimal getOutBalanceNum(@Param("startTime") Long startTime, @Param("endTime") Long endTime);

    /**
     * 获取余额手续费
     * @param startTime
     * @param endTime
     * @return
     */
    BigDecimal getBalanceFee(@Param("startTime") Long startTime, @Param("endTime") Long endTime);

    /**
     * 获取余额总量
     * @return
     */
    BigDecimal getRemainingBan();

    /**
     * 获取单种资金记录信息
     * @param changeType
     * @return
     */
    Map<String,Object> countCapitalDesc(@Param("changeType") Integer changeType);
}
